matlab的三维绘图和四维绘图

您所在的位置:网站首页 matlab三维图绘制 圆饼 matlab的三维绘图和四维绘图

matlab的三维绘图和四维绘图

2024-07-12 14:59| 来源: 网络整理| 查看: 265

一、三维绘图 1.曲线图 plot3(X1,Y1,Z1,...):以默认线性属性绘制三维点集(X1,Y1,Z1)确定的曲线plot3(X1,Y1,Z1,LineSpec):以参数LineSpec确定的线性属性绘制三维点集plot3(X1,Y1,Z1,'PropertyName',PropertyValue,...):根据指定的属性绘制三维曲线 theta = 0:0.01*pi:2*pi; x = sin(theta); y = cos(theta); z = cos(4*theta); plot3(x,y,z,'LineWidth',2); hold on; theta = 0:0.02*pi:2*pi; x = sin(theta); y = cos(theta); z = cos(4*theta); plot3(x,y,z,'rd','MarkerSize',10,'LineWidth',2);

 

2.网格图

绘制函数z=f(x,y)的三维网格图的过程:

确定自变量x和y的取值范围和取值间隔利用meshgrid函数生成“格点”矩阵计算自变量采样“格点”上的函数值:Z = f(x,y)

matlab中提供了mesh函数用于实现绘制网格图:

mesh(X,Y,Z):绘制三维网格图,颜色与曲面的高度相匹配mesh(Z):系统默认颜色与网格区域的情况下绘制数据Z的网格图mesh(...,C,'PropertyName',PropertyValue):对指定的颜色C,指定的属性值,画出三维图形meshc(...):用于画网格图与基本的等值线图meshz(...):用于绘制包含零平面的网格图h = mesh(...):返回图形对象句柄属性值向量h [X,Y] = meshgrid(-3:.5:3); Z = 2 * X.^2-3 * Y.^2; subplot(2,2,1) plot3(X,Y,Z) title('plot3') subplot(2,2,2) mesh(X,Y,Z) title('mesh') subplot(2,2,3) meshc(X,Y,Z) title('meshc') subplot(2,2,4) meshz(X,Y,Z) title('meshz') set(gcf,'Color','w');

 

3.曲面图

表示三维空间内数据的变化规律。函数有surf、surfc和surfl

surf(X,Y,Z):绘制三维的彩色曲面图。surf(X,Y,Z,C):图形的颜色采用参数C,同样可以添加属性值 [x,y] = meshgrid(-3:1/8:3); z = peaks(x,y); subplot(2,2,1);surf(z); title('surf(z)绘制形式'); subplot(2,2,2);surf(x,y,z); title('surf(x,y,z)绘图形式'); subplot(2,2,3);surfl(x,y,z); title('surfl(x,y,z)绘图形式'); subplot(2,2,4);surfc(x,y,z); title('surfc(x,y,z)绘图形式');

 

4.光照模型

光照是利用方向官员照亮物体的技术,这项技术能使表面微妙的差异更容易看到,光照也能用来对三维的图像增加现实感。

camlight函数:

camlight('light'):在照相机的右上方设置一个光源camlight('light'):在照相机的左上方设置一个光源camlight(az,el):建立一个相对于照相方位角az与仰角el的光源camlight(...,'style'):设置光源的类型为'local'或‘infinite’light_handle = camlight(...):返回光源的句柄值 surf(peaks) axis vis3d h = camlight('left'); for i = 1:20; camorbit(10,0) camlight(h,'left') pause(.1) end

 

light函数:

light('PropertyName',propertyvalue,...):可设置的光源的属性有color,style,positionhandle = light(...):返回光源的句柄值 % 准备数据 [X,Y] = meshgrid(-1:0.1:1); Z = sin(X.^2.*pi) + cos(Y.*pi); % 设置无限远平行光源光照效果 subplot(1,2,1); surf(X,Y,Z); light('Style','infinit','Position',[0 -0.6 1]); title('无限远平行光') % 设置本地光源辐射源光照效果 subplot(1,2,2); surf(X,Y,Z); light('Style','local','Position',[0 -0.6 1]); title('本地辐射光')

 

lighting函数:

lighting flat:为入射光均匀洒落在图形对象的每个面上,主要与faced配合使用lighting gouraud:先对定点颜色插补,在对定点勾画的面色进行插补,用于曲面表现lighting phong:对定点出的法线插值,在计算个像素的反光,效果好,但费时lighting none:关闭所有光源 [x,y,z] = sphere(25); subplot(2,2,1);surf(x,y,z); axis equal;shading interp; hold on; title('lighting none') subplot(2,2,2);surf(x,y,z); axis equal; light('position',[0,0.5 1]); shading interp;lighting flat; hold on; title('lighting flat'); subplot(2,2,3);surf(x,y,z); axis equal; light('position',[0,0.5 1]); shading interp;lighting gouraud; hold on; title('lighting gouraud'); subplot(2,2,4);surf(x,y,z); axis equal; light('position',[0,0.5 1]); shading interp;lighting phong; hold on; title('lighting phong'); set(gcf,'color','w');

 

lightangle函数:

lightangle(az,el):az与el表示灯光的方位角和仰角light_handle = lightangle(az,el):返回球形坐标光源的句柄值 sphere(25); axis vis3d h = light; for az = -50:10:50 lightangle(h,az,30) pause(.2) end

 

5.等值线

等值线图又叫等高线图。默认情况下,MATLAB就是画出了相应于一系列相等的空间Z值得等值线。matlab提供了contour和contour3函数绘制二维和三维的等高线。下面的格式contour换成contour3就是三维的等值线。

contour(z):直接绘制矩阵z的等高线contour(x,y,z):用x和y指定等高线的x,y坐标contour(z,n)或contour(x,y,z,n):用标量n指定绘制等高线的线条数,即从最低位置到最高位置所用的线条总数contour(z,v)或contour(x,y,z,v):向量v中的元素指定绘制等高线的位置,该向量的长度对应绘制的线条数[c,h] = contour(...):返回等高线矩阵c和列向量h,h是线条对象或补片对象的句柄。

6.三维特殊图形

MATLAB中,也提供了相应的函数用于实现特殊数的三维绘图。

t = 0:pi/10:2*pi; [X1,Y1,Z1] = cylinder(2 + cos(t)); subplot(2,3,1);surf(X1,Y1,Z1) axis square;title('三维柱面图'); subplot(2,3,2);sphere axis equal;title('三维球体'); x1 = [1 3 0.5 2.5 2]; explode = [0 1 0 0 0]; subplot(2,3,3);pie3(x1,explode) title('三维饼图');axis equal; X2 = [0 1 1 2;1 1 2 2;0 0 1 1]; Y2 = [1 1 1 1;1 0 1 0;0 0 0 0]; Z2 = [1 1 1 1;1 0 1 0;0 0 0 0]; C = [0.5000 1.0000 1.0000 0.5000; 1.0000 0.5000 0.5000 0.1667; 0.3330 0.3330 0.5000 0.5000]; subplot(2,3,4);fill3(X2,Y2,Z2,C); colormap hsv title('三维填充图');axis equal; [x2,y2] = meshgrid(-3:.5:3,-3:.1:3); z2 = peaks(x2,y2); subplot(2,3,5);ribbon(y2,z2) colormap hsv title('三维彩带图');axis equal; [X3,Y3] = meshgrid(-2:0.25:2,-1:0.2:1); Z3 = X3 .* exp(-X3.^2 - Y3.^2); [U,V,W] = surfnorm(X3,Y3,Z3); subplot(2,3,6);quiver3(X3,Y3,Z3,U,V,W,0.5); hold on surf(X3,Y3,Z3); colormap hsv view(-35,45); title('三维向量场图');axis equal; set(gcf,'Color','w'); 7.视角设置

从不同的角度观察物体,所看到的物体形状是不一样的。同样,从不同视点绘制的三维图形其形状也是不一样的。

视点的位置可由方位角和仰角表示。方位角又称旋转角,它是视点与原点连线在xy平面上的投影与y轴负方向形成的角度,正值表示逆时针,负值表示顺时针。仰角又称为视角,它是视点与原点连线与xy平面的夹角,正值表示视点在xy平面上方。负值表示视点在xy平面下方。

matlab中提供了view和rotate函数用于设置观察图的视角。view函数用于调整图形的视角效果。

view(az,el)或view([az,el]):az带表方位角,el代表视角view([x,y,z]):在直角坐标中设置视角的坐标为(x,y,z)view(2)或view(3):分别使用matlab中默认的二维视角设置(az=0,el=90)和三维视角设置(az=-38.5,el=30)view(ax,...):使用ax轴代替当前轴显示图的视角[az,el] = view:返回图形的视角与俯视角值T = view:返回一个4x4阶的当前变换矩阵 x = -5:0.5:5; [x,y] = meshgrid(x); z = x.^2-y.^2-2; subplot(2,2,1);surf(x,y,z); view(-38.5,30); title('方位角为-38.5,俯视角为30'); subplot(2,2,2);surf(x,y,z); view(-38.5+90,30); title('方位角为-38.5+90,俯视角为30'); subplot(2,2,3);surf(x,y,z); view(-38.5,60); title('方位角-38.5,俯视角为60'); subplot(2,2,4);surf(x,y,z); view(180,0); title('方位角为180,俯视角为0'); set(gcf,'color','w'); % 设置图形的背景颜色

rotate函数用于旋转三维图形,函数的格式为

rotate(h,direction,alpha):将图形的句柄值h的对象绕方向旋转一个角度,h表示是被旋转的对;direction有两种设置方法,球坐标设置法,将其设置为[theta,phi],其单位为‘度’;直角坐标法,也就是[x,y,z];参数alpha是绕方向按照右手法则旋转的角度。rotate(...,origin):参数origin为方向轴的“支点”坐标,系统默认为坐标原点。 sp11 = subplot(2,2,1); hll = surf(sp11,peaks(20)); title('无旋转') sp12 = subplot(2,2,2); h12 = surf(sp12,peaks(20)); title('绕x轴旋转') zdir = [1 0 0]; rotate(h12,zdir,25) sp21 = subplot(2,2,3); h21 = surf(sp21,peaks(20)); title('绕Y轴旋转') zdir = [0 1 0]; rotate(h21,zdir,25) sp22 = subplot(2,2,4); h22 = surf(sp22,peaks(20)); title('绕X-Y轴旋转') zidr = [1 1 0]; rotate(h22,zdir,25) set(gcf,'color','w'); 二、四维绘图

在MATLAB中,提供了meshgrid、slice、contourslice函数,可充分体现四维图形的效果。

1.slice函数

matlab提供了中表现四维空间的方式,即使用色彩,这种方式需要用户调用slice函数来显示“切片”图。

slice(V,sx,sy,sz):绘制立体V在x轴,y轴,z轴方向上与sx,sy,sz向量所对应点的切片图。其中V为mxnxp的三维立体数组。slice(X,Y,Z,V,X1,Y1,Z1):沿着由数组X1,Y1与Z1定义的曲面绘制穿过立体V的切片。slice(...,'method'):指定内插的方法,method以下方法之一slice(axes_handle,...):在句柄值axes_handle的坐标值中绘制立体切片图h = slice(...):返回组成立体切片图的surface图形对象句柄值向量h. [x,y,z] = meshgrid(-2:.2:2,-2:.25:2,-2:.16:2); v = x.*exp(-x.^2-y.^2-z.^2); xslice = [-1.2,.8,2]; yslice = 2; zslice = [-2,0]; [xsp,ysp,zsp] = sphere; slice(x,y,z,v,[-2,2],2,-2) for i = -3:.2:3 hsp = surface(xsp + i,ysp,zsp); rotate(hsp,[1 0 0],90) xd = get(hsp,'XData'); yd = get(hsp,'YData'); zd = get(hsp,'ZData'); delete(hsp) hold on hslicer = slice(x,y,z,v,xd,yd,zd); axis tight xlim([-3,3]) view(-10,35) drawnow delete(hslicer) hold off end

2.contourslice函数

用于实现三元函数切面等高线的效果图。

contourslice(X,Y,Z,V,Sx,Sy,Sz):X,Y,Z是维数为m x n x p的自变量“格点”数组;V是与X,Y,Z同维的函数值数组;Sx,Sy,Sz是决定切片位置的数值向量。假如取空阵,就表示不取切片。

[x y z v] = flow; h = contourslice(x,y,z,v,[1:9],[],[0],linspace(-8,2,10)); axis([0,10,-3,3,-3,3]);daspect([1,1,1]) camva(24); camproj perspective; campos([-3,-15,5]) set(gcf,'Color',[.5,.5,.5],'Renderer','zbuffer') set(gca,'Color','black','XColor','white',... 'YColor','white','Zcolor','white') box on



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3